Runtime Call Logic

makeCallExpression() returns an ExtensionFunctionCall. Saxon executes the call(XPathContext context, Sequence[] arguments) method each time the XSLT invokes the function.

@Override
public ExtensionFunctionCall makeCallExpression() {
return new ExtensionFunctionCall() {
@Override
public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {
String result = UUID.randomUUID().toString().toUpperCase();
return StringValue.makeStringValue(result);
}
};
}

For functions with arguments, the implementation reads values from the supplied Saxon Sequence[], converts them to Java values, executes the business logic, and returns a Saxon Sequence. Throw XPathException for validation or execution failures.

Minimal Complete Example

package com.adminserver.helper;
import net.sf.saxon.expr.XPathContext;
import net.sf.saxon.lib.ExtensionFunctionCall;
import net.sf.saxon.lib.ExtensionFunctionDefinition;
import net.sf.saxon.om.Sequence;
import net.sf.saxon.om.StructuredQName;
import net.sf.saxon.trans.XPathException;
import net.sf.saxon.value.SequenceType;
import net.sf.saxon.value.StringValue;
import java.util.UUID;
public class GetNextGUIDFunction extends ExtensionFunctionDefinition {
private static final StructuredQName qName =
new StructuredQName("helper", "com.adminserver.webservice.helper.XsltFunctionHelper", "getNextGUID");
@Override
public StructuredQName getFunctionQName() {
return qName;
}
@Override
public int getMinimumNumberOfArguments() {
return 0;
}
@Override
public int getMaximumNumberOfArguments() {
return 0;
}
@Override
public SequenceType[] getArgumentTypes() {
return new SequenceType[0];
}
@Override
public SequenceType getResultType(SequenceType[] suppliedArgs) {
return SequenceType.SINGLE_STRING;
}
@Override
public boolean hasSideEffects() {
return true;
}
@Override
public ExtensionFunctionCall makeCallExpression() {
return new ExtensionFunctionCall() {
@Override
public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {
String result = UUID.randomUUID().toString().toUpperCase();
return StringValue.makeStringValue(result);
}
};
}
}

makeCallExpression() returns an ExtensionFunctionCall object that Saxon executes each time the XSLT function is invoked.

Its call(XPathContext context, Sequence[] arguments) method is where customers must:

  • Read and convert input arguments from Saxon Sequence values.

  • Execute business logic, for example call helper, utility, or service methods.

  • Convert the result back to a Saxon value (Sequence) and return it.

  • Throw XPathException for validation or execution failures.